package SAToDA;

import java.util.ArrayList;

/**
 * Classe Diciplina, contém os atributos relacionados a uma disciplina
 * @author Grupo G2
 */
public class Disciplina {
    int id;
    String codigo;
    String nome;
    static ArrayList<Disciplina> todas = new ArrayList<>();
    
    /**
     * Construtor da classe
     * @param id Id da disciplina no banco de dados
     * @param codigo Codigo da disciplina
     * @param nome Nome da disciplina
     */
    private Disciplina(int id, String codigo, String nome) {
        this.id = id;
        this.codigo = codigo;
        this.nome = nome;
    }
    
    /**
     * Metodo que retorna uma Disciplina com os parametros passados, criando-a apenas se necessario.
     * Tem o objetivo de nao permitir que haja mais de uma instancia da mesma disciplina.
     * @param id Id da disciplina no banco de dados
     * @param codigo Codigo da disciplina
     * @param nome Nome da disciplina
     * @return instancia de Disciplina com os parametros passados.
     */
    static public Disciplina criaDisciplina(int id, String codigo, String nome) {
        Disciplina nova = new Disciplina(id, codigo, nome);
        for (int i = 0; i < todas.size(); i++){
            if (nova.equals(todas.get(i))) {
                return todas.get(i);
            }
        }
        todas.add(nova);
        return nova;
    }

    /**
     * Getter do nome
     * @return nome da disciplina
     */
    public String getNome() {
        return this.nome;
    }

    /**
     * Getter do codigo
     * @return Codigo da disciplina
     */
    public String getCodigo() {
        return this.codigo;
    }
    /**
     * Getter do id
     * @return Id da disciplina
     */
    public int getId() {
        return this.id;
    }
    
    @Override
    public boolean equals(Object obj) {
        if (obj == null || getClass() != obj.getClass()) {
            return false;
        }
        
        final Disciplina outra = (Disciplina) obj;
                if (this.id != outra.id) {
            return false;
        }        
        if ((this.codigo == null) ? (outra.codigo != null) : !this.codigo.equals(outra.codigo)) {
            return false;
        }        
        return true;
    }   
}
